perm filename GFTYPE.PSC[MF,ALS] blob sn#764502 filedate 1984-08-12 generic text, type T, neo UTF8
{3:}{$D-,W+}{$D+}PROGRAM GFTYPE(GFFILE,OUTPUT);LABEL{4:}9999;{:4}
CONST{5:}TERMINALLINE=150;LINELENGTH=79;TOPPIXEL=69;BOTPIXEL=-10;
LEFTPIXEL=-10;RIGHTPIXEL=69;{:5}TYPE{8:}ASCIICODE=32..126;{:8}{9:}
TEXTFILE=PACKED FILE OF CHAR;{:9}{20:}EIGHTBITS=0..255;
BYTEFILE=PACKED FILE OF EIGHTBITS;{:20}{36:}PIXEL=0..1;{:36}VAR{10:}
XORD:ARRAY[CHAR]OF ASCIICODE;XCHR:ARRAY[0..255]OF CHAR;{:10}{21:}
GFFILE:BYTEFILE;{:21}{23:}CURLOC:INTEGER;{:23}{25:}WANTSMNEMONI:BOOLEAN;
WANTSPIXELS:BOOLEAN;{:25}{27:}BUFFER:ARRAY[0..TERMINALLINE]OF ASCIICODE;
{:27}{35:}X,Y,Z:INTEGER;PAINTSWITCH:PIXEL;{:35}{37:}
IMAGEARRAY:PACKED ARRAY[BOTPIXEL..TOPPIXEL,LEFTPIXEL..RIGHTPIXEL]OF
PIXEL;{:37}{40:}MINX,MAXX,MINY,MAXY:INTEGER;
MINXSTATED,MAXXSTATED,MINYSTATED,MAXYSTATED:INTEGER;
MINXOBSERVED,MAXXOBSERVED,MINYOBSERVED,MAXYOBSERVED:INTEGER;
MINXOVERALL,MAXXOVERALL,MINYOVERALL,MAXYOVERALL:INTEGER;{:40}{44:}
TOTALCHARS:INTEGER;CHARPTR:ARRAY[0..255]OF INTEGER;GFPREVPTR:INTEGER;
CHARACTERCOD:INTEGER;{:44}{52:}BADCHAR:BOOLEAN;{:52}{60:}
DESIGNSIZE,CHECKSUM:INTEGER;HPPP,VPPP:INTEGER;POSTLOC:INTEGER;{:60}{65:}
A:INTEGER;C,L,M,N,O,P,Q,R:INTEGER;{:65}PROCEDURE INITIALIZE;
VAR I:INTEGER;BEGIN WRITELN('This is GFtype, Version 1.0');{11:}
FOR I:=0 TO 31 DO XCHR[I]:='?';XCHR[32]:=' ';XCHR[33]:='!';
XCHR[34]:='"';XCHR[35]:='#';XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';
XCHR[39]:='''';XCHR[40]:='(';XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';
XCHR[44]:=',';XCHR[45]:='-';XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';
XCHR[49]:='1';XCHR[50]:='2';XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';
XCHR[54]:='6';XCHR[55]:='7';XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';
XCHR[59]:=';';XCHR[60]:='<';XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';
XCHR[64]:='@';XCHR[65]:='A';XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';
XCHR[69]:='E';XCHR[70]:='F';XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';
XCHR[74]:='J';XCHR[75]:='K';XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';
XCHR[79]:='O';XCHR[80]:='P';XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';
XCHR[84]:='T';XCHR[85]:='U';XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';
XCHR[89]:='Y';XCHR[90]:='Z';XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';
XCHR[94]:='↑';XCHR[95]:='_';XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';
XCHR[99]:='c';XCHR[100]:='d';XCHR[101]:='e';XCHR[102]:='f';
XCHR[103]:='g';XCHR[104]:='h';XCHR[105]:='i';XCHR[106]:='j';
XCHR[107]:='k';XCHR[108]:='l';XCHR[109]:='m';XCHR[110]:='n';
XCHR[111]:='o';XCHR[112]:='p';XCHR[113]:='q';XCHR[114]:='r';
XCHR[115]:='s';XCHR[116]:='t';XCHR[117]:='u';XCHR[118]:='v';
XCHR[119]:='w';XCHR[120]:='x';XCHR[121]:='y';XCHR[122]:='z';
XCHR[123]:='{';XCHR[124]:='|';XCHR[125]:='}';XCHR[126]:='~';
FOR I:=127 TO 255 DO XCHR[I]:='?';{:11}{12:}
FOR I:=0 TO 127 DO XORD[CHR(I)]:=32;
FOR I:=32 TO 126 DO XORD[XCHR[I]]:=I;{:12}{26:}WANTSMNEMONI:=TRUE;
WANTSPIXELS:=TRUE;{:26}{45:}FOR I:=0 TO 255 DO CHARPTR[I]:=-1;
TOTALCHARS:=0;{:45}{61:}MINXOVERALL:=MAXINT;MAXXOVERALL:=-MAXINT;
MINYOVERALL:=MAXINT;MAXYOVERALL:=-MAXINT;{:61}END;{:3}{7:}
PROCEDURE JUMPOUT;BEGIN GOTO 9999;END;{:7}{22:}PROCEDURE OPENGFFILE;
BEGIN RESET(GFFILE,'','/B:8');CURLOC:=0;END;{:22}{24:}
FUNCTION GETBYTE:INTEGER;VAR B:EIGHTBITS;
BEGIN IF EOF(GFFILE)THEN GETBYTE:=0 ELSE BEGIN READ(GFFILE,B);
CURLOC:=CURLOC+1;GETBYTE:=B;END;END;FUNCTION GETTWOBYTES:INTEGER;
VAR A,B:EIGHTBITS;BEGIN READ(GFFILE,A);READ(GFFILE,B);CURLOC:=CURLOC+2;
GETTWOBYTES:=A*256+B;END;FUNCTION GETTHREEBYTE:INTEGER;
VAR A,B,C:EIGHTBITS;BEGIN READ(GFFILE,A);READ(GFFILE,B);READ(GFFILE,C);
CURLOC:=CURLOC+3;GETTHREEBYTE:=(A*256+B)*256+C;END;
FUNCTION SIGNEDQUAD:INTEGER;VAR A,B,C,D:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);READ(GFFILE,C);READ(GFFILE,D);CURLOC:=CURLOC+4;
IF A<128 THEN SIGNEDQUAD:=((A*256+B)*256+C)*256+D ELSE SIGNEDQUAD:=(((A
-256)*256+B)*256+C)*256+D;END;{:24}{29:}PROCEDURE INPUTLN;
VAR K:0..TERMINALLINE;BEGIN BREAK(TTY);RESET(TTY);
IF EOLN(TTY)THEN READLN(TTY);K:=0;
WHILE(K<TERMINALLINE)AND NOT EOLN(TTY)DO BEGIN BUFFER[K]:=XORD[TTY↑];
K:=K+1;GET(TTY);END;BUFFER[K]:=32;END;{:29}{30:}
FUNCTION LOWERCASIFY(C:ASCIICODE):ASCIICODE;
BEGIN IF(C>=65)AND(C<=90)THEN LOWERCASIFY:=C+32 ELSE LOWERCASIFY:=C;END;
{:30}{31:}PROCEDURE DIALOG;LABEL 1,2;VAR K:INTEGER;BEGIN REWRITE(TTY);
WRITELN(TTY,'This is GFtype, Version 1.0');{32:}
1:WRITE(TTY,'Mnemonic output? (default=yes, ? for help): ');
WANTSMNEMONI:=TRUE;INPUTLN;BUFFER[0]:=LOWERCASIFY(BUFFER[0]);
IF BUFFER[0]<>63 THEN WANTSMNEMONI:=(BUFFER[0]=121)OR(BUFFER[0]=49)OR(
BUFFER[0]=116)OR(BUFFER[0]=32)ELSE BEGIN WRITE(TTY,
'Type Y for complete listing,');
WRITELN(TTY,' N for errors/images only.');GOTO 1;END{:32};{33:}
2:WRITE(TTY,'Pixel output? (default=yes, ? for help): ');
WANTSPIXELS:=TRUE;INPUTLN;BUFFER[0]:=LOWERCASIFY(BUFFER[0]);
IF BUFFER[0]<>63 THEN WANTSPIXELS:=(BUFFER[0]=121)OR(BUFFER[0]=49)OR(
BUFFER[0]=116)OR(BUFFER[0]=32)ELSE BEGIN WRITE(TTY,
'Type Y to list characters pictorially');
WRITELN(TTY,' with *''s, N to omit this option.');GOTO 2;END{:33};{34:}
WRITE('Options selected: Mnemonic output = ');
IF WANTSMNEMONI THEN WRITE('true')ELSE WRITE('false');
WRITE('; pixel output = ');
IF WANTSPIXELS THEN WRITE('true')ELSE WRITE('false');WRITELN('.'){:34};
END;{:31}{43:}PROCEDURE PRINTSCALED(S:INTEGER);VAR DELTA:INTEGER;
BEGIN IF S<0 THEN BEGIN WRITE('-');S:=-S;END;WRITE(S DIV 65536:1);
S:=10*(S MOD 65536)+5;IF S<>5 THEN BEGIN DELTA:=10;WRITE('.');
REPEAT IF DELTA>65536 THEN S:=S+32768-(DELTA DIV 2);
WRITE(CHR(ORD('0')+(S DIV 65536)));S:=10*(S MOD 65536);DELTA:=DELTA*10;
UNTIL S<=DELTA;END;END;{:43}{46:}FUNCTION FIRSTPAR(O:EIGHTBITS):INTEGER;
BEGIN CASE O OF 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63:FIRSTPAR:=O-0;
64,69,246,241:FIRSTPAR:=GETBYTE;65,70,242:FIRSTPAR:=GETTWOBYTES;
66,71,243:FIRSTPAR:=GETTHREEBYTE;72,244,245:FIRSTPAR:=SIGNEDQUAD;
240,67,68,247,248,249,250,251,252,253,254,255:FIRSTPAR:=0;
73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115
,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133
,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151
,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169
,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187
,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205
,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239:
FIRSTPAR:=O-156;END;END;{:46}{47:}FUNCTION DOCHAR:BOOLEAN;
LABEL 9998,9999;VAR O:EIGHTBITS;P,Q:INTEGER;BEGIN DOCHAR:=TRUE;
WHILE TRUE DO{48:}BEGIN A:=CURLOC;O:=GETBYTE;P:=FIRSTPAR(O);
IF EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;{49:}IF O<=67 THEN{54:}
BEGIN IF WANTSMNEMONI THEN WRITE(' paint ');REPEAT{55:}
IF WANTSMNEMONI THEN IF PAINTSWITCH=0 THEN WRITE('(',P:1,')')ELSE WRITE(
P:1);WRITE(TTY,' p values= ',P:4);
IF P>0 THEN BEGIN IF Y>MAXYOBSERVED THEN MAXYOBSERVED:=Y;
IF Y<MINYOBSERVED THEN MINYOBSERVED:=Y;L:=X;R:=X+P-1;
IF R>MAXXOBSERVED THEN MAXXOBSERVED:=R;
IF L<MINXOBSERVED THEN MINXOBSERVED:=L;IF WANTSPIXELS THEN{56:}
IF Y<=MAXY THEN IF Y>=MINY THEN BEGIN IF L<MINX THEN L:=MINX;
IF R>MAXX THEN R:=MAXX;X:=L;
WHILE X<=R DO BEGIN IMAGEARRAY[Y,X]:=PAINTSWITCH;X:=X+1;END;END{:56};
X:=R+1;END;PAINTSWITCH:=1-PAINTSWITCH{:55};A:=CURLOC;O:=GETBYTE;
P:=FIRSTPAR(O);IF EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;UNTIL O>67;END{:54};
IF(72<=O)AND(O<=239)THEN{57:}BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','newrow ',P:1);END;Y:=Y-1;Z:=Z+P;X:=Z;PAINTSWITCH:=1;
IF WANTSMNEMONI THEN WRITE(' (y=',Y:1,', z=',Z:1,')');END{:57}
ELSE CASE O OF 69,70,71:{58:}BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','skip',O-68:1,' ',P:1);END;Y:=Y-(P+1);X:=Z;
PAINTSWITCH:=1;IF WANTSMNEMONI THEN WRITE(' (y=',Y:1,', z=',Z:1,')');
END{:58};{50:}240:IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','nop');END;247:BEGIN BEGIN WRITE(A:1,': ','! ',
'preamble command within a character!');WRITELN;END;GOTO 9998;END;
248,249:BEGIN BEGIN WRITE(A:1,': ','! ',
'postamble command within a character!');WRITELN;END;GOTO 9998;END;
67:BEGIN BEGIN WRITE(A:1,': ','! ','boc occurred before eoc!');WRITELN;
END;GOTO 9998;END;68:BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','eoc');END;WRITELN;GOTO 9999;END;{:50}
241,242,243,244:{51:}BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','xxx ''');END;BADCHAR:=FALSE;N:=16;
IF P<0 THEN BEGIN WRITE(A:1,': ','! ','string of negative length!');
WRITELN;END;WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q<32)OR(Q>126)THEN BADCHAR:=TRUE;
IF WANTSMNEMONI THEN BEGIN WRITE(XCHR[Q]);
IF N<LINELENGTH THEN N:=N+1 ELSE BEGIN WRITELN;N:=2;END;END;P:=P-1;END;
IF WANTSMNEMONI THEN WRITE('''');
IF BADCHAR THEN BEGIN WRITE(A:1,': ','! ',
'non-ASCII character in xxx command!');WRITELN;END;END{:51};245:{53:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','yyy ',P:1,' (');END;
IF WANTSMNEMONI THEN BEGIN PRINTSCALED(P);WRITE(')');END;END{:53};
OTHERS:BEGIN WRITE(A:1,': ','! ','undefined command ',O:1,'!');WRITELN;
END END{:49};END{:48};9998:WRITELN('!');DOCHAR:=FALSE;9999:END;{:47}
{59:}PROCEDURE READPOSTAMBL;VAR K:INTEGER;P,Q,M,V,W,C:INTEGER;
BEGIN POSTLOC:=CURLOC-1;WRITE('Postamble starts at byte ',POSTLOC:1);
IF POSTLOC=GFPREVPTR THEN WRITELN('.')ELSE WRITELN(
', after special info at byte ',GFPREVPTR:1,'.');P:=SIGNEDQUAD;
IF P<>GFPREVPTR THEN BEGIN WRITE(A:1,': ','! ','backpointer in byte ',
CURLOC-4:1,' should be ',GFPREVPTR:1,' not ',P:1,'!');WRITELN;END;
DESIGNSIZE:=SIGNEDQUAD;CHECKSUM:=SIGNEDQUAD;
WRITE('design size = ',DESIGNSIZE:1,' (');
PRINTSCALED(DESIGNSIZE DIV 16);WRITELN('pt)');
WRITELN('check sum = ',CHECKSUM:1);HPPP:=SIGNEDQUAD;VPPP:=SIGNEDQUAD;
WRITE('hppp = ',HPPP:1,' (');PRINTSCALED(HPPP);WRITELN(')');
WRITE('vppp = ',VPPP:1,' (');PRINTSCALED(VPPP);WRITELN(')');
MINXSTATED:=SIGNEDQUAD;MAXXSTATED:=SIGNEDQUAD;MINYSTATED:=SIGNEDQUAD;
MAXYSTATED:=SIGNEDQUAD;
WRITELN('min x = ',MINXSTATED:1,', max x = ',MAXXSTATED:1);
IF MINXSTATED>MINXOVERALL THEN BEGIN WRITE(A:1,': ','! ',
'min x should be <=',MINXOVERALL:1,'!');WRITELN;END;
IF MAXXSTATED<MAXXOVERALL THEN BEGIN WRITE(A:1,': ','! ',
'max x should be >=',MAXXOVERALL:1,'!');WRITELN;END;
WRITELN('min y = ',MINYSTATED:1,', max y = ',MAXYSTATED:1);
IF MINYSTATED>MINYOVERALL THEN BEGIN WRITE(A:1,': ','! ',
'min y should be <=',MINYOVERALL:1,'!');WRITELN;END;
IF MAXYSTATED<MAXYOVERALL THEN BEGIN WRITE(A:1,': ','! ',
'max y should be >=',MAXYOVERALL:1,'!');WRITELN;END;{63:}
REPEAT K:=GETBYTE;IF K=246 THEN BEGIN C:=FIRSTPAR(246);V:=SIGNEDQUAD;
W:=SIGNEDQUAD;P:=SIGNEDQUAD;
IF WANTSMNEMONI THEN BEGIN WRITE('Character ',C:1,': device width ',V:1,
', width ',W:1,' (');PRINTSCALED(W DIV 16);
WRITELN('ds), location ',P:1);END;
IF P<>CHARPTR[C]THEN BEGIN WRITE(A:1,': ','! ',
'character location should be ',CHARPTR[C]:1,'!');WRITELN;END;K:=240;
END;UNTIL K<>240;{:63};{62:}
IF K<>249 THEN BEGIN WRITE(A:1,': ','! ','should be postpost!');WRITELN;
END;Q:=SIGNEDQUAD;IF Q<>POSTLOC THEN BEGIN WRITE(A:1,': ','! ',
'postamble pointer should be ',POSTLOC:1,' not ',Q:1);WRITELN;END;
M:=GETBYTE;IF M<>129 THEN BEGIN WRITE(A:1,': ','! ',
'identification byte should be ',129:1);WRITELN;END;K:=CURLOC;M:=223;
WHILE(M=223)AND NOT EOF(GFFILE)DO M:=GETBYTE;
IF NOT EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'signature in byte ',CURLOC-1:1,' should be 223','!');JUMPOUT;
END ELSE IF CURLOC<K+4 THEN BEGIN WRITE(A:1,': ','! ',
'not enough signature bytes at end of file!');WRITELN;END;{:62};END;
{:59}{64:}BEGIN INITIALIZE;DIALOG;{66:}OPENGFFILE;O:=GETBYTE;
IF O<>247 THEN BEGIN WRITE(' ','Bad GF file: ',
'First byte isn''t start of preamble!','!');JUMPOUT;END;O:=GETBYTE;
IF O<>129 THEN BEGIN WRITE(A:1,': ','! ',
'identification byte should be ',129:1,' not ',O:1,'!');WRITELN;END;
O:=GETBYTE;WRITE('''');WHILE O>0 DO BEGIN O:=O-1;WRITE(XCHR[GETBYTE]);
END;WRITELN('''');{:66};{67:}REPEAT GFPREVPTR:=CURLOC;{68:}
REPEAT A:=CURLOC;O:=GETBYTE;P:=FIRSTPAR(O);
IF EOF(GFFILE)THEN BEGIN WRITE(' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;IF O=245 THEN BEGIN{53:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','yyy ',P:1,' (');END;
IF WANTSMNEMONI THEN BEGIN PRINTSCALED(P);WRITE(')');END;END{:53};
O:=240;END ELSE IF(O>=241)AND(O<=244)THEN BEGIN{51:}
BEGIN IF WANTSMNEMONI THEN BEGIN WRITELN;WRITE(A:1,': ','xxx ''');END;
BADCHAR:=FALSE;N:=16;
IF P<0 THEN BEGIN WRITE(A:1,': ','! ','string of negative length!');
WRITELN;END;WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q<32)OR(Q>126)THEN BADCHAR:=TRUE;
IF WANTSMNEMONI THEN BEGIN WRITE(XCHR[Q]);
IF N<LINELENGTH THEN N:=N+1 ELSE BEGIN WRITELN;N:=2;END;END;P:=P-1;END;
IF WANTSMNEMONI THEN WRITE('''');
IF BADCHAR THEN BEGIN WRITE(A:1,': ','! ',
'non-ASCII character in xxx command!');WRITELN;END;END{:51};O:=240;
END ELSE IF O=240 THEN IF WANTSMNEMONI THEN BEGIN WRITELN;
WRITE(A:1,': ','nop');END;UNTIL O<>240;{:68};
IF O<>248 THEN BEGIN IF O<>67 THEN BEGIN WRITE(' ','Bad GF file: ',
'byte ',CURLOC-1:1,' is not boc (',O:1,')','!');JUMPOUT;END;WRITELN;
WRITE(CURLOC-1:1,': beginning of char ');{69:}A:=CURLOC;
TOTALCHARS:=TOTALCHARS+1;CHARACTERCOD:=SIGNEDQUAD;P:=SIGNEDQUAD;
C:=CHARACTERCOD MOD 256;IF C<0 THEN C:=C+256;WRITE(C:1);
IF CHARACTERCOD<>C THEN WRITE(' in family ',(CHARACTERCOD-C)DIV 256:1);
MINXSTATED:=SIGNEDQUAD;MAXXSTATED:=SIGNEDQUAD;MINYSTATED:=SIGNEDQUAD;
MAXYSTATED:=SIGNEDQUAD;Z:=SIGNEDQUAD;
IF WANTSMNEMONI THEN WRITELN(': ',MINXSTATED:1,'<=x<',MAXXSTATED+1:1,' '
,MINYSTATED:1,'<=y<',MAXYSTATED+1:1);MINXOBSERVED:=MAXINT;
MAXXOBSERVED:=-MAXINT;MINYOBSERVED:=MAXINT;MAXYOBSERVED:=-MAXINT;
IF CHARPTR[C]<>P THEN BEGIN WRITE(A:1,': ','! ',
'previous character pointer should be ',CHARPTR[C]:1,', not ',P:1,'!');
WRITELN;END ELSE IF P>0 THEN IF WANTSMNEMONI THEN WRITELN(
'(previous character with the same code started at byte ',P:1,')');
CHARPTR[C]:=GFPREVPTR;
IF WANTSMNEMONI THEN WRITE('(initially y=',Y:1,', z=',Z:1,')');
IF WANTSPIXELS THEN{38:}BEGIN MINX:=MINXSTATED;
IF MINX<LEFTPIXEL THEN MINX:=LEFTPIXEL;MAXX:=MAXXSTATED;
IF MAXX>RIGHTPIXEL THEN MAXX:=RIGHTPIXEL;MINY:=MINYSTATED;
IF MINY<BOTPIXEL THEN MINY:=BOTPIXEL;MAXY:=MAXYSTATED;
IF MAXY>TOPPIXEL THEN MAXY:=TOPPIXEL;Y:=MINY;
WHILE Y<=MAXY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IMAGEARRAY[Y,X]:=0;X:=X+1;END;Y:=Y+1;END;END{:38}
;Y:=MAXYSTATED;X:=Z;PAINTSWITCH:=1;{:69};
IF NOT DOCHAR THEN BEGIN WRITE(' ','Bad GF file: ',
'char ended unexpectedly','!');JUMPOUT;END;{70:}
IF MINXOBSERVED<MINXOVERALL THEN MINXOVERALL:=MINXOBSERVED;
IF MAXXOBSERVED>MAXXOVERALL THEN MAXXOVERALL:=MAXXOBSERVED;
IF MINYOBSERVED<MINYOVERALL THEN MINYOVERALL:=MINYOBSERVED;
IF MAXYOBSERVED>MAXYOVERALL THEN MAXYOVERALL:=MAXYOBSERVED;
IF MINXOBSERVED<MINXSTATED THEN WRITELN(
'The previous character should have had min x <= ',MINXOBSERVED:1);
IF MAXXOBSERVED>MAXXSTATED THEN WRITELN(
'The previous character should have had max x >= ',MAXXOBSERVED+1:1);
IF MINYOBSERVED<MINYSTATED THEN WRITELN(
'The previous character should have had min y <= ',MINYOBSERVED:1);
IF MAXYOBSERVED>MAXYSTATED THEN WRITELN(
'The previous character should have had max y >= ',MAXYOBSERVED+1:1);
{:70};IF WANTSPIXELS THEN{39:}BEGIN{41:}
IF(MAXX<MAXXOBSERVED)OR(MINX>MINXOBSERVED)OR(MAXY<MAXYOBSERVED)OR(MINY>
MINYOBSERVED)THEN WRITELN(
'(The character is too large to be displayed in full.)');
IF MAXY>MAXYOBSERVED THEN MAXY:=MAXYOBSERVED;
IF MINY<MINYOBSERVED THEN MINY:=MINYOBSERVED;
IF MAXX>MAXXOBSERVED THEN MAXX:=MAXXOBSERVED;
IF MINX<MINXOBSERVED THEN MINX:=MINXOBSERVED;
WRITELN('Character image, with upper left corner at (',MINX:1,',',MAXY+1
:1,'):'){:41};Y:=MAXY;WHILE Y>=MINY DO BEGIN X:=MINX;N:=0;
WHILE X<=MAXX DO BEGIN IF IMAGEARRAY[Y,X]=0 THEN N:=N+1 ELSE BEGIN WHILE
N>0 DO BEGIN IF(N>=8)AND((X-MINX-N)MOD 8=0)THEN BEGIN WRITE(CHR(9));
N:=N-8;END ELSE BEGIN WRITE(' ');N:=N-1;END;END;WRITE('*');END;X:=X+1;
END;WRITELN;Y:=Y-1;END;END{:39};END;UNTIL O=248;{:67};WRITELN;
READPOSTAMBL;WRITE('The file had ',TOTALCHARS:1,' character');
IF TOTALCHARS<>1 THEN WRITE('s');WRITE(' altogether.');9999:END.{:64}